﻿using System;
using System.Collections.Generic;

using Logger;
using System.Reflection;
using ClickLand.CorporacionPlaza.Comunes.Recursos;
using ClickLand.CorporacionPlaza.AccesoDato.Fabricas;
using ClickLand.CorporacionPlaza.Comunes.Entidades;
using ClickLand.CorporacionPlaza.LogicaNegocio.Contratos;


namespace ClickLand.CorporacionPlaza.LogicaNegocio.Implementacion.ComandosEstablecimiento
{
    /// <summary> Comando que consulta los establecimientos libres segun un rango de fecha</summary>
    public class ConsultarEstablecimientosLibres : IComando<IList<Establecimiento>>
    {

        #region Atributos

        /// <summary> Fecha inicio del rango </summary>
        private readonly DateTime _fechaInicio;

        private readonly DateTime _fin;

        #endregion

        #region Constructores

        /// <summary> Constructor de la clase  </summary>
        /// <param name="inicio"> </param>
        /// <param name="fin"> </param>
        public ConsultarEstablecimientosLibres(DateTime inicio, DateTime fin)
        {
            _fechaInicio = inicio;
            _fin = fin;
        }

        #endregion

        #region Implementacion


        /// <summary> Metodo que ejecuta la accion del comando </summary>
        /// <returns></returns>
        public IList<Establecimiento> Ejecutar()
        {

            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = FabricaDao.ObtenerFabrica().ObtenerDaoEstablecimiento().ConsultarEstablecimientosLibres(_fechaInicio, _fin);
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion

            return retorno;
        }

        #endregion
    }
}
